#include "wxsbutton.h"

#include <prep.h>

namespace {
  wxsRegisterItem<wxsButton> Reg( _T( "Button" ), _T( "按钮" ), wxsTWidget, _T( "标准" ), 340 );
  WXS_ST_BEGIN( wxsButtonStyles, _T( "" ) )
  WXS_ST_CATEGORY( "wxButton" )
  WXS_ST( wxBU_LEFT )
  WXS_ST( wxBU_TOP )
  WXS_ST( wxBU_RIGHT )
  WXS_ST( wxBU_BOTTOM )
  WXS_ST( wxBU_EXACTFIT )
  WXS_ST_DEFAULTS()
  WXS_ST_END()
  WXS_EV_BEGIN( wxsButtonEvents )
  WXS_EVI( EVT_BUTTON, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEvent, Click )
  WXS_EV_END()
}

wxsButton::wxsButton( wxsItemResData* Data ):
  wxsWidget(
    Data,
    &Reg.Info,
    wxsButtonEvents,
    wxsButtonStyles ),
  Label( _T( "按钮" ) ),
  IsDefault( false ) {}

void wxsButton::OnBuildCreatingCode() {
  switch( GetLanguage() ) {
    case wxsCPP: {
      AddHeader( _T( "<wx/button.h>" ), GetInfo().ClassName, hfInPCH );
      Codef( _T( "%C(%W, %I, %t, %P, %S, %T, %V, %N);\n" ), Label.wx_str() );
      if( IsDefault ) {
        Codef( _T( "%ASetDefault();\n" ) );
      }
      BuildSetupWindowCode();
      return;
    }
    case wxsUnknownLanguage:
    default: {
      wxsCodeMarks::Unknown( _T( "wxsButton::OnBuildCreatingCode" ), GetLanguage() );
    }
  }
}

wxObject* wxsButton::OnBuildPreview( wxWindow* Parent, long Flags ) {
  wxButton* Preview = new wxButton( Parent, GetId(), Label, Pos( Parent ), Size( Parent ), Style() );
  if( IsDefault ) {
    Preview->SetDefault();
  }
  return SetupWindow( Preview, Flags );
}

void wxsButton::OnEnumWidgetProperties( M_Code_unused long Flags ) {
  WXS_STRING( wxsButton, Label, _T( "Label" ), _T( "label" ), _T( "" ), false )
  WXS_BOOL( wxsButton, IsDefault, _T( "Is default" ), _T( "default" ), false )
}
